# 使用引号('或")包括起来，创建字符串
str1 = 'hello "world"'  # 这样输出的内容是hello "world" 就会包含双引号
print(str1)
str2 = "hello 'world'"  # 这样输出的内容是hello 'world' 就会包含单引号
print(str2)

# str是string类型的缩写，在使用type函数查看类型时，输出的结果是str
print(type(str1))

# 可以通过+拼接字符串
str3 = 'hello' + 'world'

# 字符串使用注意事项
# python不支持单字符类型，单字符在python中也被看成字符串类型 这点和Java不同 Java中有char类型 python没有char类型
# 不管是单引号还是双引号，都是字符串类型
str4 = "A"
print(type(str4))

# 用三个单引号'''内容''' 或者三个双引号 """内容""" 包括起来的字符串，可以使得字符串保持原样输出
# 注意如果这样里面就不能在有三个单引号或者双引号 否则会报错 因为python会认为这是字符串的结束
str5 = '''hello
world  he has a high opinion of himself
哈哈你好
'''
print(str5)

# 如果希望\t \n 原样输出 可以在字符串前面加上r 就可以把整个字符串中的\t \n原样输出
str6 = r"jack\nhh"
print(str6)

# 字符串的驻留机制  内容相同的字符串，在内存中驻留一份，不会重复创建
str7 = 'hello world'
str8 = 'hello world'
str9 = 'hello world'
# id函数可以获取对象的内存地址
print("str7的地址:", id(str7))
print("str8的地址:", id(str8))
print("str9的地址:", id(str9))

# 驻留机制的几种情况讨论 (以下几种情况会发生驻留)  需要在cmd中的python环境中
# 1.字符串是由26个英文字母大小写,0-9 _ 组成
# 2.字符串长度为0或者1时
# 3.字符串在编译时进行驻留,而非运行时
# 4.[-5,256]的整数数字

print("-------------------")
# 但是pycharm对驻留进制进行了优化
str10 = 'abc123'
str11 = 'abc123'
print("str10的地址:", id(str10))
print("str11的地址:", id(str11))
print("-------------------")
str12 = -100
str13 = -100
print("str12的地址:", id(str12))
print("str13的地址:", id(str13))

# 字符串驻留机制的好处
# 1.字符串驻留机制可以减少内存的占用
# 2.字符串驻留机制可以减少内存的访问次数
